ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc201MDEuYyBiL2RyaXZlcnMvc201MDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2RiMDJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zbTUwMS5jCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTdOR1YmxpIEZhdmVyZ2VzIC0gPHd3dy5zdGF1YmxpLmNvbT4KKyAqIFBpZXJyZSBBVUJFUlQgIHAuYXViZXJ0QHN0YXVibGkuY29tCisgKgorICogKEMpIENvcHlyaWdodCAyMDA1CisgKiBNYXJ0aW4gS3JhdXNlIFRRLVN5c3RlbXMgR21iSCBtYXJ0aW4ua3JhdXNlQHRxcy5kZQorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBCYXNpYyB2aWRlbyBzdXBwb3J0IGZvciBTTUkgU001MDEgIlZveWFnZXIiIGdyYXBoaWMgY29udHJvbGxlcgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKworI2lmZGVmIENPTkZJR19WSURFT19TTTUwMQorCisjaW5jbHVkZSA8dmlkZW9fZmIuaD4KKyNpbmNsdWRlIDxzbTUwMS5oPgorCisjZGVmaW5lIHJlYWQ4KHB0clJlZykgICAgICAgICAgICAgICAgXAorICAgICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShzbTUwMS5pc2FCYXNlICsgcHRyUmVnKQorCisjZGVmaW5lIHdyaXRlOChwdHJSZWcsdmFsdWUpIFwKKyAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoc201MDEuaXNhQmFzZSArIHB0clJlZykgPSB2YWx1ZQorCisjZGVmaW5lIHJlYWQxNihwdHJSZWcpIFwKKyAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShzbTUwMS5pc2FCYXNlICsgcHRyUmVnKSkKKworI2RlZmluZSB3cml0ZTE2KHB0clJlZyx2YWx1ZSkgXAorICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKHNtNTAxLmlzYUJhc2UgKyBwdHJSZWcpID0gdmFsdWUpCisKKyNkZWZpbmUgcmVhZDMyKHB0clJlZykgXAorICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShzbTUwMS5pc2FCYXNlICsgcHRyUmVnKSkKKworI2RlZmluZSB3cml0ZTMyKHB0clJlZywgdmFsdWUpIFwKKyAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoc201MDEuaXNhQmFzZSArIHB0clJlZykgPSB2YWx1ZSkKKworR3JhcGhpY0RldmljZSBzbTUwMTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU21pU2V0UmVncyAtLQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZCBTbWlTZXRSZWdzICh2b2lkKQoreworCS8qCisJICogVGhlIGNvbnRlbnQgb2YgdGhlIGNoaXBzZXQgcmVnaXN0ZXIgZGVwZW5kcyBvbiB0aGUgYm9hcmQgKGNsb2NrcywKKwkgKiAuLi4pCisJICovCisJY29uc3QgU01JX1JFR1MgKnByZWcgPSBib2FyZF9nZXRfcmVncyAoKTsKKwl3aGlsZSAocHJlZy0+SW5kZXgpIHsKKwkJd3JpdGUzMiAocHJlZy0+SW5kZXgsIHByZWctPlZhbHVlKTsKKwkJLyoKKwkJICogSW5zZXJ0IGEgZGVsYXkgYmV0d2VlbgorCQkgKi8KKwkJdWRlbGF5ICgxMDAwKTsKKwkJcHJlZyArKzsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHZpZGVvX2h3X2luaXQgLS0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZCAqdmlkZW9faHdfaW5pdCAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgKnZtLCBpOworCisJbWVtc2V0ICgmc201MDEsIDAsIHNpemVvZiAoR3JhcGhpY0RldmljZSkpOworCisJLyoKKwkgKiBJbml0aWFsaXphdGlvbiBvZiB0aGUgYWNjZXNzIHRvIHRoZSBncmFwaGljIGNoaXBzZXQgUmV0cmVpdmUgYmFzZQorCSAqIGFkZHJlc3Mgb2YgdGhlIGNoaXBzZXQgKHNlZSBib2FyZC9SUFhDbGFzc2ljL2VjY3guYykKKwkgKi8KKwlpZiAoKHNtNTAxLmlzYUJhc2UgPSBib2FyZF92aWRlb19pbml0ICgpKSA9PSAwKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJaWYgKChzbTUwMS5mcmFtZUFkcnMgPSBib2FyZF92aWRlb19nZXRfZmIgKCkpID09IDApIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlzbTUwMS53aW5TaXplWCA9IGJvYXJkX2dldF93aWR0aCAoKTsKKwlzbTUwMS53aW5TaXplWSA9IGJvYXJkX2dldF9oZWlnaHQgKCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19WSURFT19TTTUwMV84QlBQKQorCXNtNTAxLmdkZkluZGV4ID0gR0RGX184QklUX0lOREVYOworCXNtNTAxLmdkZkJ5dGVzUFAgPSAxOworCisjZWxpZiBkZWZpbmVkKENPTkZJR19WSURFT19TTTUwMV8xNkJQUCkKKwlzbTUwMS5nZGZJbmRleCA9IEdERl8xNkJJVF81NjVSR0I7CisJc201MDEuZ2RmQnl0ZXNQUCA9IDI7CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1ZJREVPX1NNNTAxXzMyQlBQKQorCXNtNTAxLmdkZkluZGV4ID0gR0RGXzMyQklUX1g4ODhSR0I7CisJc201MDEuZ2RmQnl0ZXNQUCA9IDQ7CisjZWxzZQorI2Vycm9yIFVuc3VwcG9ydGVkIFNNNTAxIEJQUAorI2VuZGlmCisKKwlzbTUwMS5tZW1TaXplID0gc201MDEud2luU2l6ZVggKiBzbTUwMS53aW5TaXplWSAqIHNtNTAxLmdkZkJ5dGVzUFA7CisKKwkvKiBMb2FkIFNtaSByZWdpc3RlcnMgKi8KKwlTbWlTZXRSZWdzICgpOworCisJLyogKHNlZSBib2FyZC9SUFhDbGFzc2ljL1JQWENsYXNzaWMuYykgKi8KKwlib2FyZF92YWxpZGF0ZV9zY3JlZW4gKHNtNTAxLmlzYUJhc2UpOworCisJLyogQ2xlYXIgdmlkZW8gbWVtb3J5ICovCisJaSA9IHNtNTAxLm1lbVNpemUvNDsKKwl2bSA9ICh1bnNpZ25lZCBpbnQgKilzbTUwMS5mcmFtZUFkcnM7CisJd2hpbGUoaS0tKQorCQkqdm0rKyA9IDA7CisKKwlyZXR1cm4gKCZzbTUwMSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHZpZGVvX3NldF9sdXQgLS0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZCB2aWRlb19zZXRfbHV0ICgKKwl1bnNpZ25lZCBpbnQgaW5kZXgsICAgICAgICAgICAvKiBjb2xvciBudW1iZXIgKi8KKwl1bnNpZ25lZCBjaGFyIHIsICAgICAgICAgICAgICAvKiByZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGcsICAgICAgICAgICAgICAvKiBncmVlbiAqLworCXVuc2lnbmVkIGNoYXIgYiAgICAgICAgICAgICAgIC8qIGJsdWUgKi8KKwkpCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfVklERU9fU001MDEgKi8K